#ifndef OPERATEUR_H
#define OPERATEUR_H

#include "Constante.h"
#include "Reel.h"
#include "Entier.h"
#include "Rationnel.h"
#include <cmath>

class Operateur
{
public:
    Operateur();
};

struct Addition : public Operateur{
  static Constante* apply(const Constante&, const Constante&);
};

struct Soustraction : public Operateur{
  static Constante* apply(const Constante&, const Constante&);
};

struct Multiplcation : public Operateur{
  static Constante* apply(const Constante&, const Constante&);
};

struct Division : public Operateur{
  static Constante* apply(const Constante&, const Constante&);
};

struct Pow : public Operateur{
  static Constante* apply(const Constante&, const Constante&);
};

struct Sign : public Operateur{
  static Constante* apply(const Constante&);
};

struct Square : public Operateur{
  static Constante* apply(const Constante&);
};

struct Cube : public Operateur{
  static Constante* apply(const Constante&);
};

struct Inv : public Operateur{
  static Constante* apply(const Constante&);
};

struct Sqrt : public Operateur{
  static Constante* apply(const Constante&);
};


struct Cos : public Operateur{
  static Constante* apply(const Constante&);
};
struct Cosh : public Operateur{
  static Constante* apply(const Constante&);
};
struct Sin : public Operateur{
  static Constante* apply(const Constante&);
};
struct Sinh : public Operateur{
  static Constante* apply(const Constante&);
};
struct Tan : public Operateur{
  static Constante* apply(const Constante&);
};
struct Tanh : public Operateur{
  static Constante* apply(const Constante&);
};
struct Log : public Operateur{
  static Constante* apply(const Constante&);
};
struct Ln : public Operateur{
  static Constante* apply(const Constante&);
};
#endif // OPERATEUR_H
